home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / diskBoot.OpenProm / RCS / devSunProm.c,v < prev    next >
Text File  |  1991-01-05  |  6KB  |  236 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     90.09.17.11.05.25;  author jhh;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     90.07.17.16.06.15;  author jhh;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @@
  22.  
  23.  
  24. 1.2
  25. log
  26. @brought it up-to-date with standard kernel sources
  27. @
  28. text
  29. @/* 
  30.  * devSunProm.c --
  31.  *
  32.  *    Routines that access the Sun PROM device drivers.  This code is
  33.  *    based on SunOS bootstrap code in boot/os/devio.c
  34.  *
  35.  * Copyright 1989 Regents of the University of California
  36.  * Permission to use, copy, modify, and distribute this
  37.  * software and its documentation for any purpose and without
  38.  * fee is hereby granted, provided that the above copyright
  39.  * notice appear in all copies.  The University of California
  40.  * makes no representations about the suitability of this
  41.  * software for any purpose.  It is provided "as is" without
  42.  * express or implied warranty.
  43.  */
  44.  
  45. #ifdef notdef
  46. static char rcsid[] = "$Header: /sprite/src/boot/sunprom/RCS/devSunProm.c,v 1.1 90/07/17 16:06:15 jhh Exp Locker: jhh $ SPRITE (Berkeley)";
  47. #endif /* not lint */
  48.  
  49.  
  50. #include "sprite.h"
  51. #include "user/fs.h"
  52. #include "dev.h"
  53. #include "devFsOpTable.h"
  54. #include "boot.h"
  55. #include "machMon.h"
  56. #include "fs.h"
  57.  
  58. #define DEV_BSIZE DEV_BYTES_PER_SECTOR
  59.  
  60. #define READ 1
  61. #define WRITE 2
  62.  
  63. /*
  64.  * Our stand-alone I/O request block.
  65.  */
  66. MachMonIORequest *saioPtr;
  67.  
  68.  
  69. /*
  70.  *----------------------------------------------------------------------
  71.  *
  72.  * SunPromDevOpen --
  73.  *
  74.  *    Open the device used for booting.  This depends on the initialization
  75.  *    of the devicePtr->data field done in Dev_Config.
  76.  *
  77.  * Results:
  78.  *    SUCCESS or FAILURE.
  79.  *
  80.  * Side effects:
  81.  *    None.
  82.  *
  83.  *----------------------------------------------------------------------
  84.  */
  85. ReturnStatus
  86. SunPromDevOpen(devicePtr)
  87.     Fs_Device    *devicePtr;    /* Sprite device description */
  88. {
  89.     MachMonBootParam *paramPtr = (MachMonBootParam *)devicePtr->data;
  90.     MachMonDevInfo *devInfoPtr;
  91.     char *buffer;
  92.  
  93.     devInfoPtr = paramPtr->bootDevice->b_devinfo;
  94.     /*
  95.      * Setup the I/O request block;
  96.      */
  97.     saioPtr = (MachMonIORequest *)malloc(sizeof(MachMonIORequest));
  98.     saioPtr->si_flgs = 0;
  99.     saioPtr->si_boottab = paramPtr->bootDevice;
  100.     saioPtr->si_devdata = (char *)0;
  101.     saioPtr->si_ctlr = paramPtr->ctlrNum;
  102.     saioPtr->si_unit = paramPtr->unitNum;
  103.     saioPtr->si_boff = paramPtr->partNum;
  104.     saioPtr->si_cyloff = 0;
  105.     saioPtr->si_offset = 0;
  106.     saioPtr->si_bn = 0;
  107.     saioPtr->si_ma = (char *)0;
  108.     saioPtr->si_cc = 0;
  109.     saioPtr->si_sif = (struct saif *)0;
  110.     saioPtr->si_devaddr = (char *)0;
  111.     saioPtr->si_dmaaddr = (char *)0;
  112.  
  113.     if (devInfoPtr) {
  114.     /*
  115.      * The dev info describes how to map the device in, how much
  116.      * DMA space to set up, and how much local memory the device needs.
  117.      * Assume that the PROM device is already all set up.
  118.      */
  119. #ifdef notdef
  120.     Mach_MonPrintf("devInfoPtr: dma %d lcl %d max %d\n",
  121.         devInfoPtr->d_dmabytes, devInfoPtr->d_localbytes,
  122.         devInfoPtr->d_maxiobytes);
  123. #endif
  124.     if (devInfoPtr->d_dmabytes > 0) {
  125.         /*
  126.          * Allocate space for DMA, then map it into the DMA region of VM.
  127.          */
  128.         buffer = malloc(devInfoPtr->d_dmabytes);
  129.         buffer = VmMach_DMAAlloc(devInfoPtr->d_dmabytes, buffer);
  130.         saioPtr->si_dmaaddr = buffer;
  131.     }
  132.     if (devInfoPtr->d_localbytes > 0) {
  133.         saioPtr->si_devdata = malloc(devInfoPtr->d_localbytes);
  134.     }
  135.     }
  136.     if ( (paramPtr->bootDevice->b_open)(saioPtr) == 0) {
  137.     return(SUCCESS);
  138.     } else {
  139.     return(FAILURE);
  140.     }
  141. }
  142.  
  143.  
  144. /*
  145.  *----------------------------------------------------------------------
  146.  *
  147.  * SunPromDevRead --
  148.  *
  149.  *    Read from the boot device used for booting.
  150.  *
  151.  * Results:
  152.  *    SUCCESS or FAILURE.
  153.  *
  154.  * Side effects:
  155.  *    The read operation.
  156.  *
  157.  *----------------------------------------------------------------------
  158.  */
  159. ReturnStatus
  160. SunPromDevRead(devicePtr, ioPtr, replyPtr)
  161.     Fs_Device    *devicePtr;    /* Sprite device description */
  162.     Fs_IOParam  *ioPtr;
  163.     Fs_IOReply  *replyPtr;
  164. {
  165.     register int numBytes;
  166.     register int totalBytes;
  167.     register int maxlen;
  168.     register int len;
  169.  
  170.     saioPtr->si_bn = ioPtr->offset / DEV_BSIZE;
  171.     saioPtr->si_ma = ioPtr->buffer;
  172.  
  173.     if (saioPtr->si_boottab->b_devinfo) {
  174.     maxlen = saioPtr->si_boottab->b_devinfo->d_maxiobytes;
  175.     } else {
  176.     maxlen = DEV_BSIZE;
  177.     }
  178.     /*
  179.      * Break the I/O in to chunks that are edible by the device.
  180.      */
  181.     totalBytes = 0;
  182.     len = ioPtr->length;
  183.     while (len > 0) {
  184.     if (len > maxlen) {
  185.         saioPtr->si_cc = maxlen;
  186.     } else {
  187.         saioPtr->si_cc = len;
  188.     }
  189.     numBytes = (*saioPtr->si_boottab->b_strategy)(saioPtr, READ);
  190.     if (numBytes <= 0) {
  191.         break;
  192.     }
  193.     saioPtr->si_ma += numBytes;
  194.     saioPtr->si_bn += numBytes / DEV_BSIZE;
  195.     len -= numBytes;
  196.     totalBytes += numBytes;
  197.     }
  198.     replyPtr->length = totalBytes;
  199.     if (numBytes < 0) {
  200.     return(FAILURE);
  201.     } else {
  202.     return(SUCCESS);
  203.     }
  204. }
  205. @
  206.  
  207.  
  208. 1.1
  209. log
  210. @Initial revision
  211. @
  212. text
  213. @d18 1
  214. a18 1
  215. static char rcsid[] = "$Header: /sprite/src/kernel/dev/RCS/devBlockDevice.c,v 1.1 89/05/01 15:32:32 mendel Exp Locker: brent $ SPRITE (Berkeley)";
  216. d28 1
  217. d132 1
  218. a132 1
  219. SunPromDevRead(devicePtr, offset, len, buffer, numBytesPtr)
  220. d134 2
  221. a135 4
  222.     int offset;            /* Byte offset */
  223.     int len;            /* Byte count;
  224.     char *buffer;        /* Address to read into */
  225.     int *numBytesPtr;        /* Return, the amount actually read */
  226. d140 1
  227. d142 2
  228. a143 2
  229.     saioPtr->si_bn = offset / DEV_BSIZE;
  230.     saioPtr->si_ma = (char *)buffer;
  231. d154 1
  232. d170 1
  233. a170 1
  234.     *numBytesPtr = totalBytes;
  235. @
  236.